﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using Custom;

namespace MBilbaoMobilePro
{
    public partial class frmHorarios : Form
    {
        public frmHorarios()
        {
            InitializeComponent();
        }

        string _horarios;
        Parada _origen;
        Parada _destino;

        public void ShowDetail(string horarios, Parada Origen, Parada Destino)
        {
            _horarios = horarios;
            _origen = Origen;
            _destino = Destino;

            this.ShowDialog();
        }

        private void LoadTwoLines(string horarios)
        {
            tabContainerDos.SelectedIndex = 1;

            XmlDocument doc = helper.XmlGetDocumentFromSource(horarios);

            string currentTime = DateTime.Now.ToString("HH:mm");

            ListViewItem nuevoItem;

            //Primeros
            lstDosPrimerosA.Columns[1].Text = "Hora [" + currentTime + "]";
            lstDosPrimerosB.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//primeros/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["pri"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["pri"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 0;
                }
                lstDosPrimerosA.Items.Add(nuevoItem);
            }
            foreach (XmlNode primero in doc.SelectNodes("//primeros2/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["pri"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["pri"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 0;
                }
                lstDosPrimerosB.Items.Add(nuevoItem);
            }

            //Normales
            lstDosNormalesA.Columns[1].Text = "[" + currentTime + "]Desde ";
            lstDosNormalesB.Columns[1].Text = "[" + currentTime + "]Desde ";
            foreach (XmlNode primero in doc.SelectNodes("//caja/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["desde"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["hasta"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["frecuen"].Value + "min.");
                if (DateTime.Parse(currentTime) < DateTime.Parse(primero.Attributes["desde"].Value))
                {
                    nuevoItem.ImageIndex = 0;
                }
                else if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["hasta"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 2;
                }
                lstDosNormalesA.Items.Add(nuevoItem);
            }
            foreach (XmlNode primero in doc.SelectNodes("//caja2/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["desde"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["hasta"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["frecuen"].Value + "min.");
                if (DateTime.Parse(currentTime) < DateTime.Parse(primero.Attributes["desde"].Value))
                {
                    nuevoItem.ImageIndex = 0;
                }
                else if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["hasta"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 2;
                }
                lstDosNormalesB.Items.Add(nuevoItem);
            }

            //Ultimos
            lstDosUltimosA.Columns[1].Text = "Hora [" + currentTime + "]";
            lstDosUltimosB.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//ultimos/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["ult"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["ult"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 0;
                }
                lstDosUltimosB.Items.Add(nuevoItem);
            }

            //Nocturnos
            lstDosNocturnosA.Columns[1].Text = "Hora [" + currentTime + "]";
            lstDosNocturnosB.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//nocturnos/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["ult"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["ult"].Value))
                {
                    if (primero.Attributes["ult"].Value.StartsWith("0") && !currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                }
                else
                {
                    if (!primero.Attributes["ult"].Value.StartsWith("0") && currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                }
                lstDosNocturnosA.Items.Add(nuevoItem);
            }
            foreach (XmlNode primero in doc.SelectNodes("//nocturnos/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["ult"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["ult"].Value))
                {
                    if (primero.Attributes["ult"].Value.StartsWith("0") && !currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                }
                else
                {
                    if (!primero.Attributes["ult"].Value.StartsWith("0") && currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                }
                lstDosNocturnosB.Items.Add(nuevoItem);
            }
        }

        private void LoadOneLine(string horarios)
        {
            tabContainerUno.SelectedIndex = 1;

            XmlDocument doc = helper.XmlGetDocumentFromSource(horarios);

            string currentTime = DateTime.Now.ToString("HH:mm");

            ListViewItem nuevoItem;

            //Primeros
            lstUnoPrimeros.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//primeros/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["pri"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["pri"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 0;
                }
                lstUnoPrimeros.Items.Add(nuevoItem);
            }

            //Normales
            lstUnoNormales.Columns[1].Text = "[" + currentTime + "]Desde ";
            foreach (XmlNode primero in doc.SelectNodes("//caja/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["desde"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["hasta"].Value);
                nuevoItem.SubItems.Add(primero.Attributes["frecuen"].Value+ "min.");
                if (DateTime.Parse(currentTime) < DateTime.Parse(primero.Attributes["desde"].Value))
                {
                    nuevoItem.ImageIndex = 0;
                }
                else if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["hasta"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 2;
                }
                lstUnoNormales.Items.Add(nuevoItem);
            }

            //Ultimos
            lstUnoUltimos.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//ultimos/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["ult"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["ult"].Value))
                {
                    nuevoItem.ImageIndex = 1;
                }
                else
                {
                    nuevoItem.ImageIndex = 0;
                }
                lstUnoUltimos.Items.Add(nuevoItem);
            }

            //Nocturnos
            lstUnoNocturnos.Columns[1].Text = "Hora [" + currentTime + "]";
            foreach (XmlNode primero in doc.SelectNodes("//nocturnos/*"))
            {
                nuevoItem = new ListViewItem();
                nuevoItem.SubItems.Add(primero.Attributes["ult"].Value);
                if (DateTime.Parse(currentTime) > DateTime.Parse(primero.Attributes["ult"].Value))
                {
                    if (primero.Attributes["ult"].Value.StartsWith("0") && !currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                }
                else
                {
                    if (!primero.Attributes["ult"].Value.StartsWith("0") && currentTime.StartsWith("0"))
                    {
                        nuevoItem.ImageIndex = 1;
                    }
                    else
                    {
                        nuevoItem.ImageIndex = 0;
                    }
                }
                lstUnoNocturnos.Items.Add(nuevoItem);
            }

        }

        private void menuItem1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void menuItem3_Click(object sender, EventArgs e)
        {
            string tarifasPath = helper.ApplicationCombinedPath("data", "tarifas.xml");

            helper.FormDisable(this, "Buscando tarifas...");
            XmlDocument doc = helper.XmlGetDocument(tarifasPath);
            helper.FormEnable(this);

            frmTarifas tarifas = new frmTarifas();
            tarifas.ShowDetail(doc.InnerXml);
        }

        private void menuItem5_Click(object sender, EventArgs e)
        {
            frmAutobuses autobuses = new frmAutobuses();
            autobuses.ShowDialog();
        }

        private void frmHorarios_Load(object sender, EventArgs e)
        {
            this.Show();
            helper.FormDisable(this, "Cargando horarios...");
            if (Parada.EnLaMismaLinea(_origen, _destino))
            {
                lblUnoOrigen.Text = string.Format("{0} - {1}", _origen.Zona, _origen.Nombre);
                lblUnoDestino.Text = string.Format("{0} - {1}", _destino.Zona, _destino.Nombre);
                pnlUno.Visible = true;
                pnlDos.Visible = false;
                LoadOneLine(_horarios);
            }
            else
            {
                lblDosOrigen.Text = string.Format("{0} - {1} -> {2}", _origen.Zona, _origen.Nombre, "San Inazio");
                lblDosDestino.Text = string.Format("{0} - {1} -> {2}", _destino.Zona, "San Inazio", _destino.Nombre);
                pnlUno.Visible = false;
                pnlDos.Visible = true;
                LoadTwoLines(_horarios);
            }
            helper.FormEnable(this);
        }

    }
}